{
int i, rc;
+ if (!cpus_empty(cpu_possible_map))
+ return;
+
for (i = 0; i < NR_CPUS; i++) {
rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, i, NULL);
if (rc == -ENOENT)
void __init smp_prepare_cpus(unsigned int max_cpus)
{
- int cpu, rc;
+ int cpu;
struct task_struct *idle;
cpu_data[0] = boot_cpu_data;
if (max_cpus != 0)
xen_smp_intr_init(0);
- for (cpu = 1; cpu < max_cpus; cpu++) {
- rc = HYPERVISOR_vcpu_op(VCPUOP_is_up, cpu, NULL);
- if (rc == -ENOENT)
- break;
- BUG_ON(rc != 0);
+ for_each_cpu_mask (cpu, cpu_possible_map) {
+ if (cpu == 0)
+ continue;
cpu_data[cpu] = boot_cpu_data;
cpu_2_logical_apicid[cpu] = cpu;
(void *)cpu_gdt_descr[cpu].address,
XENFEAT_writable_descriptor_tables);
- cpu_set(cpu, cpu_possible_map);
#ifdef CONFIG_HOTPLUG_CPU
if (xen_start_info->flags & SIF_INITDOMAIN)
cpu_set(cpu, cpu_present_map);
void __devinit smp_prepare_boot_cpu(void)
{
- cpu_possible_map = cpumask_of_cpu(0);
+ prefill_possible_map();
cpu_present_map = cpumask_of_cpu(0);
cpu_online_map = cpumask_of_cpu(0);
}